<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>



//一个简单的bind()函数接受一个函数和一个环境，返回一个在给定环境中调用给定函数的函数，并且将所有参数原封不动传递过去。 
function bind(fn, context){ 
    return function(){ 
        return fn.apply(context, arguments); 
    }; 
} 
//被绑定函数与普通函数相比有更多的开销，它们需要更多内存，同时也因为多重函数调用而稍微慢一点，所以最好只在必要时使用。
//函数绑定要创建一个函数，可以在特定的环境中以指定的参数调用另一个函数，该特征常常和回调函数及事件处理函数一起使用。
var handler = {
    mesage : 'Event handled',
    handleClick : function(event) {
        alert(this.message);
    }
};
var btn = document.getElementById('my-btn');
EventUtil.addHandler(btn, 'click', handler.hadleClick);    //undefined
//出现上述结果的原因在于没有保存handler.handleClick()环境（上下文环境），所以this对象最后指向了DOM按钮而非是handler。可以使用闭包修正问题：
var handler = {
    mesage : 'Event handled',
    handleClick : function(event) {
        alert(this.message);
    }
};
var btn = document.getElementById('my-btn');
EventUtil.addHandler(btn, "click", function(event) {
    handler.handleClick(event);
});

function bind(fn, context) {
    return function() {
        return fn.apply(context, arguments);
    };
}

var handler = {
    mesage : 'Event handled',
    handleClick : function(event) {
        alert(this.message);
    }
};
var btn = document.getElementById('my-btn');
EventUtil.addHandler(btn, "click", bind(handler.handlerClick, handler));





</script>
</head>
<body>




</body>
</html>
